package cn.com.cpic.insurance.rulecheck.core.rule;

import cn.com.cpic.insurance.rulecheck.core.ModifiableSet;
import cn.com.cpic.insurance.rulecheck.core.Operatable;
import cn.com.cpic.insurance.rulecheck.core.Tokenable;

/**
 * 规则消费程序
 * 
 * @author 代波
 * @since 2011-8-13
 */
public interface RuleConsumer<T> extends Tokenable<String>, Operatable<T> {
	/**
	 * 获得规则消费程序的标签
	 * 
	 * @return 标签集合
	 */
	ModifiableSet<String> getTagSet();

	/**
	 * 判断操作是否失败，操作失败后，可从getErrorMessage()方法中获得失败原因。 operate方法抛出异常，也是失败的一种，与这个方法的区别是，这个方法判断可预知的异常(失败)，
	 * 而operate方法抛出未知原因的异常。
	 * 
	 * @return 返回true表示操作失败
	 */
	boolean isOperateFail();

	/**
	 * 操作失败后，获得失败原因
	 * 
	 * @return 失败原因
	 */
	String getErrorMessage();
}
